package org.becomingMd;

import Sync.InteractiveLogic;
import Sync.SharedSocket;
import Sync.SyncReceiveThread;
import Sync.SyncSendThread;

import java.io.DataInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;

/**
 *  目标：完成TCP通信快速入门-服务端开发：要求实现与多个客户端同时通信。
 */
public class Server {
    //用来存在线的客户端集合
    ArrayList<Socket> onLineSockets =new ArrayList<>();

    public static void main(String[] args) throws Exception {
        System.out.println("-----服务端启动成功-------");
        // 1、创建ServerSocket的对象，同时为服务端注册端口。
        ServerSocket serverSocket = new ServerSocket(8888);
        new Send_Local_IP_Address().start();

        while (true) {
            // 2、使用serverSocket对象，调用一个accept方法，等待客户端的连接请求
            Socket socket = serverSocket.accept();

            System.out.println("有人上线了：" + socket.getRemoteSocketAddress());
//这里可能有潜在问题，用UDP告知其实就可以了
            DataInputStream dis = new DataInputStream(socket.getInputStream());
            String choice = dis.readUTF();


            switch (choice)
                {
                    case "文件传输":
                        //接受文件线程一定要优先开启，不然就会被阻塞了
                        new ServerReceiveFileThread(socket).start();
                       new ServerSendFileThread(socket).start();

                        break;
                    case "文字交流":
                        // 3、把这个客户端对应的socket通信管道，交给一个独立的线程负责处理。
                        new ServerReaderThread(socket).start();
                        new ServerWriterThread(socket).start();
                        break;
                     case "云同步":
                         InteractiveLogic interactiveLogic = new InteractiveLogic();
                         SharedSocket sharedSocket = new SharedSocket(socket);
                         new SyncSendThread(sharedSocket,interactiveLogic).start();
                         new SyncReceiveThread(sharedSocket,interactiveLogic).start()  ;
                         break;



                }

        }
    }
}